#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPushButton* button = new QPushButton(this);

    button->move(250, 250);
    button->setText("按钮");

//    connect(button, &QPushButton::clicked, this, &Widget::Handler); // 使用自定义槽函数
//    connect(button, &QPushButton::clicked, this, &Widget::close); // 使用QT默认的槽函数

    // 自定义信号可以在构造函数中被发射，也可以在特定的函数中被发射
//    connect(this, &Widget::mySignal, this, &Widget::Handler);
//    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::Handler1);

//     使用lambda表达式
//    connect(ui->pushButton, &QPushButton::clicked, this, [](){
//qDebug() << "Lambda被执行";
//    });

    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::on_pushButton_clicked);

//    emit mySignal();
}

Widget::~Widget()
{
    delete ui;
}

// 自定义槽函数 -- 信号函数和槽函数都可以带参数，但是信号函数的参数个数必须大于等于槽函数的参数个数
void Widget::Handler(const QString &text)
{
    this->setWindowTitle(text);

    button->setText("Display");
}

void Widget::Handler1()
{
    this->setWindowTitle("窗口标题设置为1");
    qDebug() << "Click Button1";
}

void Widget::Handler2()
{
    this->setWindowTitle("窗口标题设置为2");
    qDebug() << "Click Button2";
}


void Widget::on_pushButton_clicked()
{
//    emit mySignal("窗口标题设置为1");
    this->move(200,200);
}

void Widget::on_pushButton_2_clicked()
{
    // 解绑信号和槽
    disconnect(ui->pushButton, &QPushButton::clicked, this, &Widget::Handler1);

    // 重新绑定信号和槽
    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::Handler2);
}
